<?php
// +----------------------------------------------------------------------
// | makePHP 
// +----------------------------------------------------------------------
// | Copyright (c) 2009 http://makephp.org All rights reserved.
// +----------------------------------------------------------------------
// | Licensed BSD.(http://www.make.org/BSD-license.txt)
// +----------------------------------------------------------------------
// | Author: 叁石(sanshi) <sanshi0815@tom.com>
// | Author: 白家昌<baijc2004cn@126.com>
// +----------------------------------------------------------------------

/**
 * 功能: 分页类，根据提供的数据总量和页面大小
 * 创建日期:Fri Apr 20 16:45:21 CST 2007
 * 最后更新:
 * 作者: sanshi <sanshi0815@tom.com>
 */

class pagination  
{
	var $result = array();
	var $pVar = "myp";//page参数分页记数
	var $urlParamStr = ""; //页面的所有参数
	var $sqlMoveNumber = 0; //数据的偏移量
	var $is_post = false;
	
	public function pagination()
	{
		
	}
	public function set($sum,$pageSize,$page="",$is_post = false)
	{
		$this->is_post = $is_post;
		$this->pVar = defined('PAGE_BAR') ? PAGE_BAR : 'myp' ;
		$url = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
		//计算出总页数
		$curPage = $this->getCurPage();
		
		$temp['sumPage'] = ceil($sum/$pageSize);
		//修改了,页码超出的bug
		if($curPage>$temp['sumPage']) $curPage=$temp['sumPage'];
		$temp['curPage'] = $curPage;
		$temp['nextPage'] = $temp['sumPage'] > $curPage ? ($curPage+1) : $temp['sumPage'];
		$temp['upPage']   = $curPage >1 ? $curPage-1 :1;
		$temp['endPage']  = $temp['sumPage'];
		$this->urlParamStr = $this->_makeUrl($url);
		$temp['urlPageStr'] = ($page=="") ? $this->_makeUrl($url) : $page.$this->urlParamStr;
		
		$this->sqlMoveNumber = $curPage <2 ? 0 : ($curPage-1)*$pageSize;
		$temp['sqlMoveNumber'] = $this->sqlMoveNumber;
		$temp['rowNo'] = $sum;
		$this->result = $temp;
		return $this->result;
		//print_r($temp);exit();
	}
	public function getSqlMove()
	{
		return $this->sqlMoveNumber;
	}
	public function getFooter()
	{
		$str= "共有 <FONT COLOR=#FF0033>{$this->result['rowNo']}</FONT> 条 <a href='{$this->result['urlPageStr']}{$this->result['upPage']}'";
		if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['upPage']});' ";
		$str .=" >上一页</a> ";
		$str .="  当前 {$this->result['curPage']} 页";
		$str .="  共有 {$this->result['sumPage']} 页";
		$str .="  <a href='{$this->result['urlPageStr']}{$this->result['nextPage']}'";
		if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['nextPage']});' ";
		$str .=" >下一页</a>";
		return $str;
	}
	public function getJumpPage()
	{
		if($this->is_post)
		{
			$str = "  跳到第 <select name='topage' size='1' onchange='sanshi_page_post(\"{$this->result['urlPageStr']}\"+this.value,this.value)'>\n";
		}else{
			$str = "  跳到第 <select name='topage' size='1' onchange='window.location=\"{$this->result['urlPageStr']}\"+this.value'>\n";
		}
        for($i=1;$i<=$this->result['sumPage'];$i++)
        {
            $str .= ($i==$this->result['curPage']) ? "<option value='$i' selected>$i</option>\n" : "<option value='$i'>$i</option>\n";
        }
         $str.="</select> 页";
		 //输出form表单
		if($this->is_post)
		{
			$str .="<script>
			function sanshi_page_post(jump_link,page_no)
			{
				document.getElementById('sanshi_goPage').action = jump_link; document.getElementById('{$this->pVar}').value = page_no;
				document.getElementById('sanshi_goPage').submit();
				return false;
			}
			</script>";
			$str .="<form name='sanshi_goPage' id='sanshi_goPage' method=post>";
			$str .="<input type=\"hidden\" name='{$this->pVar}' id='{$this->pVar}' value=0>";
			$_POST = isset($_POST) ? $_POST : array();
			foreach($_POST AS $k=>$v)
			{
				$str .="<input type=\"hidden\" name=\"{$k}\" id=\"{$k}\" value=\"{$v}\">";
			}
			$str .="</form>";
		}
        return $str;
	}
	public function getCurPage()
	{
		return isset($_GET[$this->pVar]) ? intval($_GET[$this->pVar]) : 1 ;
	}
	//分析出url的参数返回？后的参数，页码为空 包括问号
	private function _makeUrl($url)
	{
		$arrayUrl=parse_url($url);
		if(isset($arrayUrl['query']))
		{
			$q=$arrayUrl['query'];
			parse_str($q,$qParam);
			//print_r($qParam);
			if(array_key_exists($this->pVar,$qParam))
			{
				foreach ($qParam AS $k=>$v)
				{
					if($k !=$this->pVar) $temp[$k] = $v;
				}
				$temp[$this->pVar] = "";
				if(function_exists("http_build_query"))
					return '?'.http_build_query($temp);
				else
					return '?'.sanshi_http_build_query($temp);
			}else {
				return "?{$q}&{$this->pVar}=";
			}
		}else{
			return "?{$this->pVar}=";
		}
		
	}
}
function sanshi_http_build_query($a,$b='',$c=0)
{
	if (!is_array($a)) return false;
	foreach ((array)$a as $k=>$v)
	{
		if ($c) 
			$k=$b."[".$k."]"; 
		elseif (is_int($k)) 
			$k=$b.$k;
		if (is_array($v)||is_object($v)) 
		{
			$r[]=http_build_query($v,$k,1);
			continue;
		}
		$r[]=$k."=".urlencode($v);
	}
	return implode("&",$r);
}
/*
//print_r($_SERVER);
$p = new pagination();
$p->set(10,2,'thi.php');
echo $p->getFooter();
echo $p->getJumpPage();
*/
?>